﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TSharp.Core.Util;
namespace TSharp.Core.AppBox.Tests
{
    /// <summary>
    /// SafeConvertTest 的摘要说明
    /// </summary>
    [TestClass]
    public class SafeConvertTest
    {
        public SafeConvertTest()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///获取或设置测试上下文，该上下文提供
        ///有关当前测试运行及其功能的信息。
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region 附加测试属性
        //
        // 编写测试时，还可使用以下附加属性:
        //
        // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // 在运行每个测试之前，使用 TestInitialize 来运行代码
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // 在每个测试运行完之后，使用 TestCleanup 来运行代码
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        public enum EnumInt32 : int
        {
            a, b, c, d
        }
        public enum EnumInt64 : long
        {
            a, b, c, d
        }
        public enum EnumInt8 : byte
        {
            a, b, c, d
        }
        [TestMethod()]
        public void ToEnumTest3()
        {
            ToEnumTest3Helper(3, EnumInt32.d);
            ToEnumTest3Helper(3L, EnumInt64.d);
            ToEnumTest3Helper((byte)3, EnumInt8.d);
        }
        /// <summary>
        ///ToEnum 的测试
        ///</summary>
        public void ToEnumTest3Helper<TResult>(object s, TResult v)

            where TResult : struct
        {
            var e = s.ToEnum(default(TResult));

            Assert.AreEqual(e, v);

        }

        [TestMethod]
        public void ToEnumTestIntvalue()
        {
            ToEnumTestHelper(EnumInt64.d, 3);
            ToEnumTestHelper(EnumInt32.d, 3);
            ToEnumTestHelper(EnumInt8.d, 3);
        }

        /// <summary>
        ///ToEnum 的测试
        ///</summary>
        public void ToEnumTestHelper<TEnum>(TEnum expected, int intvalue)
            where TEnum : struct
        {
            TEnum actual = intvalue.ToEnum<TEnum>();
            Assert.AreEqual(expected, actual);
        }


    }
}
